package cn.dev33.satoken.context.dubbo.filter;

import cn.dev33.satoken.same.SaSameUtil;
import org.apache.dubbo.common.constants.CommonConstants;
import org.apache.dubbo.common.extension.Activate;
import org.apache.dubbo.rpc.*;

/**
 * Sa-Token 整合 Dubbo Provider端过滤器(服务端、供应商)
 * <p>
 * 此过滤器为覆盖 Sa-Token 包内过滤器
 *
 * @author zhang peng
 */
@Activate(group = {CommonConstants.PROVIDER}, order = Integer.MIN_VALUE)
public class DubboProviderFilter implements Filter {

    @Override
    public Result invoke (Invoker<?> invoker, Invocation invocation) throws RpcException {
// 取出 Same-Token 进行校验
        String sameToken = invocation.getAttachment(SaSameUtil.SAME_TOKEN);
        SaSameUtil.checkToken(sameToken);

        // 取出其他自定义附加数据
        // TenantContext tenantContext = invocation.getAttachment("tenantContext");

        // 开始调用
        return invoker.invoke(invocation);
    }

}
